www.gusucode.com > Supernice PHP轻型社交圈系统 v1.5PHP源码程序 > Supernice PHP轻型社交圈系统 v1.5/Supernice_v1.5/Supernice_v1.5/system/class.loction.php
<?php class map { private static $_instance; const REQ_GET = 1; const REQ_POST = 2; /** * 单例模式 * @return map */ public static function instance() { if (!self::$_instance instanceof self) { self::$_instance = new self; } return self::$_instance; } /** * 执行CURL请求 * @author: xialei<xialeistudio@gmail.com> * @param $url * @param array $params * @param bool $encode * @param int $method * @return mixed */ private function async($url, $params = array(), $encode = true, $method = self::REQ_GET) { $ch = curl_init(); if ($method == self::REQ_GET) { $url = $url . '?' . http_build_query($params); $url = $encode ? $url : urldecode($url); curl_setopt($ch, CURLOPT_URL, $url); } else { curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); } curl_setopt($ch, CURLOPT_REFERER, 'map'); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resp = curl_exec($ch); curl_close($ch); return $resp; } /** * ip定位 * @param string $ip * @return array * @throws Exception */ public function locationByIP($ip) { $params = array( 'ak' => 'QL86DYGIOPrCxblQS1IFFtfG', 'ip' => $ip, 'coor' => 'bd09ll'//百度地图GPS坐标 ); $api = 'http://api.map.baidu.com/location/ip'; $resp = self::async($api, $params); $data = json_decode($resp, true); //有错误 if ($data['status'] != 0) { return 0; } else{ //返回地址信息 return array( 'address' => $data['content']['address'], 'province' => $data['content']['address_detail']['province'], 'city' => $data['content']['address_detail']['city'], 'district' => $data['content']['address_detail']['district'], 'street' => $data['content']['address_detail']['street'], 'street_number' => $data['content']['address_detail']['street_number'], 'city_code' => $data['content']['address_detail']['city_code'], 'lng' => $data['content']['point']['x'], 'lat' => $data['content']['point']['y'] );} } /** * GPS定位 * @param $lng * @param $lat * @return array * @throws Exception */ public function locationByGPS($lng, $lat) { $params = array( 'coordtype' => 'wgs84ll',//坐标的类型,目前支持的坐标类型包括:bd09ll(百度经纬度坐标)、gcj02ll(国测局经纬度坐标)、wgs84ll( GPS经纬度) 'location' => $lat . ',' . $lng, 'ak' => 'QL86DYGIOPrCxblQS1IFFtfG', 'output' => 'json', // 'pois' => 0 //是否显示指定位置周边的poi,0为不显示,1为显示。当值为1时,显示周边100米内的poi。 ); $resp =self::async('http://api.map.baidu.com/geocoder/v2/', $params, false); $data = json_decode($resp, true); if ($data['status'] != 0) { return 0; }else{ return array( 'address' => $data['result']['formatted_address'], 'province' => $data['result']['addressComponent']['province'], 'city' => $data['result']['addressComponent']['city'], 'street' => $data['result']['addressComponent']['street'], 'street_number' => $data['result']['addressComponent']['street_number'], 'city_code'=>$data['result']['cityCode'], 'lng'=>$data['result']['location']['lng'], 'lat'=>$data['result']['location']['lat'] ); }} }//lng: 116.3207676804, lat: 40.064084055578 /* header('Content-Type: text/html; charset=utf-8'); PRINT_R(map::locationByGPS('116.3207676804','40.064084055578')); PRINT_R(map::locationByGPS('112.709896','38.397008')); */ ?>